package com.huangyi.commoncore.domain.dto;

import lombok.Data;

import java.util.List;

/**
 * 分页数据传输对象基类
 * 
 * <p>提供分页查询结果的通用数据结构，包含总数、总页数和数据列表
 * 
 * @param <T> 数据类型
 * @author huangyi
 * @version 1.0
 * @since 2024
 */
@Data
public class BasePageDTO<T> {
    
    /** 查询结果总数 */
    Integer totals;

    /** 总页数 */
    Integer totalPages;

    /** 数据列表 */
    List<T> list;

    /**
     * 计算总页数
     * 
     * <p>根据总数量和每页大小计算总页数，使用向上取整
     * 
     * @param totals 总数量
     * @param pageSize 页大小
     * @return 总页数
     * @throws IllegalArgumentException 当页大小小于等于0时抛出
     */
    public static int calculateTotalPages(long totals, int pageSize) {
        if (pageSize <= 0) {
            throw new IllegalArgumentException("Page size must be greater than 0.");
        }
        return (int) Math.ceil((double) totals / pageSize);
    }

}
